package main

import (
	"Demo/docs"
	"Demo/model"
	"flag"
	"fmt"
	"gitee.com/liumou_site/logger"
	"github.com/gin-gonic/gin"
	"github.com/spf13/cast"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
	"os"
)

// @title           Swagger Example API
// @version         1.0
// @description     This is a sample server celler server.
// @termsOfService  http://swagger.io/terms/

// @contact.name   API Support
// @contact.url    http://www.swagger.io/support
// @contact.email  support@swagger.io

// @license.name  Apache 2.0
// @license.url   http://www.apache.org/licenses/LICENSE-2.0.html

// @host      localhost:8080
// @BasePath  /api/v1

// @securityDefinitions.basic  BasicAuth

// @externalDocs.description  OpenAPI
// @externalDocs.url          https://swagger.io/resources/open-api/
func main() {
	version := "1.3.0"
	var conf string
	var port int
	var ver, show bool
	gfs := flag.NewFlagSet("clt", flag.ExitOnError)
	defaultConf := "config/net.toml"
	gfs.IntVar(&port, "p", 1025, "设置服务器端口")
	gfs.StringVar(&conf, "c", defaultConf, "设置配置文件路径")
	gfs.BoolVar(&ver, "v", false, "显示版本号")
	gfs.BoolVar(&show, "s", false, "查看程序简介")
	args := os.Args
	err := gfs.Parse(args[1:])
	if err != nil {
		return
	}
	if port <= 1024 {
		logger.Error("端口设置小于1024,请重新设置")
		os.Exit(2)
	}
	if ver {
		fmt.Println(version)
		os.Exit(0)
	}
	if show {
		fmt.Println("这是一个针对广西国产化Linux操作系统的运维工具箱,通过前后端的方式实现功能：\n" +
			"程序会启动一个后端,然后自动打开一个本地网址展示工具的功能,通过在网页点击功能按钮实现对操作系统的管理" +
			"\n作者：坐公交也用券" +
			"\n主页: https://liumou.site")
		os.Exit(0)
	}
	server := gin.Default() // 创建一个引擎
	server.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	docs.SwaggerInfo.Title = "API接口演示"
	docs.SwaggerInfo.Host = "http://localhost:" + cast.ToString(port)
	docs.SwaggerInfo.BasePath = "/api/"
	gin.ForceConsoleColor() // 设置强制彩色日志
	model.IndexApi(server)
	Listen := fmt.Sprintf(":%d", port)
	fmt.Println("http://localhost" + Listen + "/swagger/index.html")
	err = server.Run(Listen) // 启动服务
	if err != nil {
		logger.Error("服务启动失败: ", err.Error())
		os.Exit(3)
	}
}
